# -*- coding:utf-8 -*-
import datetime
import calendar
from app import db
from app.tools.timestamp import timestamp


class ModelMixin(object):
    @classmethod
    def new(cls, form):
        m = cls(form)
        m.save()
        return m

    @classmethod
    def update(cls, model_id, form):
        m = cls.query.get(model_id)
        m._update(form)
        m.save()

    @classmethod
    def delete(cls, model_id):
        m = cls.query.get(model_id)
        m.remove()

    def __repr__(self):
        class_name = self.__class__.__name__
        return u'<{0}: \n  {1}\n>'.format(class_name, self.id)

    def save(self):
        db.session.add(self)
        db.session.commit()

    def remove(self):
        db.session.delete(self)
        db.session.commit()

    @classmethod
    def __sort(cls, li):
        for model_id in li:
            m = cls.query.get(model_id)
            m.sort = str(li.index(model_id))
            m.save()


class Risk_Application(db.Model, ModelMixin):
    __tablename__ = 'risk_application'
    id = db.Column(db.Integer, primary_key=True)
    # 申请的资料
    name = db.Column(db.String(32))  # 申请人
    person_type = db.Column(db.String(32))  # 个人 / 商家
    phone = db.Column(db.String(23))  # 申请电话
    area = db.Column(db.Text)  # 地区
    mark = db.Column(db.Text)  # 申请备注
    pledge_type = db.Column(db.String(23))  # 类型:  抵押（GPS）/ 质押（转移）
    amount = db.Column(db.String(20))  # 额度
    days = db.Column(db.String(20))  # 期限
    deadline = db.Column(db.String(23))  # 到期时间
    interest = db.Column(db.String(23))  # 利息 谁计算

    # 流程(共用)
    flow_id = db.Column(db.String(20), unique=True)  # 流程单号
    flow_status = db.Column(db.String(20))  # 流程状态， 记录类型: 申请/放款/跟进/完结
    review_status = db.Column(db.String(32), default=u'未审')  # 审核状态 记录下一个审核的部门 控制流程流向

    # 申请
    initiator = db.Column(db.String(23))  # 发起人工号 (客服或管理层)
    timestamp_app = db.Column(db.String(23), default=timestamp)  # 发起申请时间

    # 放款
    timestamp_loan = db.Column(db.String(23))  # 发起放款时间

    # 跟进
    timestamp_pass_loan = db.Column(db.String(23))  # 放款通过时间
    track_number = db.Column(db.String(23))  # 当前跟进人 staff_number
    loan_status = db.Column(db.String(23))  # 贷款状态: 待发起/即将到期/生效/逾期/已还清
    pay_off_term = db.Column(db.String(10))  # 当前所处期数
    pay_off_time = db.Column(db.String(23))  # 最终还清日期

    # """
    # 1）申请
    # 发起：客服部 - 一审：车辆管理部 - 终审：综合管理部
    # 发起：管理层 -  终审：管理层
    # 2）放款
    # 发起：客服部 - 一审：车辆管理部 - 二审：综合管理部 - 终审：财务部
    # 发起：管理层 -  一审：管理层 - 终审：财务部
    # """

    def __init__(self, form):
        self.name = form.get('name', '')
        self.person_type = form.get('person_type', '')
        self.phone = form.get('phone', '')
        self.days = form.get('days', '')
        self.area = form.get('area', '')
        self.mark = form.get('mark', '')
        self.pledge_type = form.get('pledge_type', '')
        self.amount = form.get('amount', '')
        self.interest = form.get('interest', '')


class Risk_Flow(db.Model, ModelMixin):  # 记录审核历史
    __tablename__ = 'risk_flow'
    id = db.Column(db.Integer, primary_key=True)
    flow_id = db.Column(db.String(32))  # 流程单号
    review = db.Column(db.String(23))  # 审核人 staff_number
    review_name = db.Column(db.String(23))  # 审核人名字 name
    timestamp = db.Column(db.Integer, default=timestamp)  # 审核时间


class Risk_Loan_Track(db.Model, ModelMixin):  # 记录跟进历史
    __tablename__ = 'risk_loan_track'
    id = db.Column(db.Integer, primary_key=True)
    flow_id = db.Column(db.String(32))  # 流程单号
    timestamp = db.Column(db.String(23), default=timestamp)  # 跟进时间
    track_number = db.Column(db.String(23))  # 跟进人 staff_number
    track_name = db.Column(db.String(23))  # 跟进人 name
    content = db.Column(db.Text)  # 跟进内容
    times = db.Column(db.String(23))  # 记录期数  第一期 第二期..
    term_pay_off_time = db.Column(db.String(23))  # 本期还清日期

    def __init__(self, form):
        self.track_number = form.get('track_number', '')
        self.track_name = form.get('track_name', '')
        self.content = form.get('content', '')
        flow_id = form.get('flow_id', '')
        self.flow_id = flow_id

    def set_term(self, count='1'):
        self.times = str(count)


class RiskPicture(db.Model, ModelMixin):  # 用于存放风控的各种图片
    __tablename__ = 'risk_picture'
    id = db.Column(db.Integer, primary_key=True)

    # 抵押（GPS）
    DY_DICT = {
        'app': {
            '0': u'夫妻双方二代有效身份证',
            '1': u'结婚证、双方户口本',
            '2': u'借款人详版征信报告（24个月内，查询次数低于8次，60天以上逾期低于2次，90天逾期低于1次）',
            '3': u'非本地户口提供暂住证或居住证（本地有房产或者稳定收入）',
            '4': u'车辆机动车登记证（仅限本地私家车，不含两地牌）',
            '5': u'一把以上车钥匙照片',
            '6': u'车辆行驶证（当地车管所核发的正式机动车行驶证，年检未过期，必须覆盖一个月）',
            '7': u'借款人本人的邢台银行借记卡',
            '8': u'机动车交通强制险和商业险保单（交强险，车损险，盗抢险，三者险，不计免赔险，以上保险必须覆盖一个月）',
            '9': u'房产证明：需在当地城市，提供房产证（无房产证提供购房合同和发票，或银行按揭合同和还款流水）',
            '10': u'10个借款人的联系电话、近三个月的通话详单',
            '11': u'其它补充资料',
        },
        'loan': {
            '0': u'《借款协议》',
            '1': u'相关合同和文件',
            '2': u'车管所车辆抵押登记证明',
            '3': u'GPS安装信息',
        }
    }

    # 质押（转移）
    ZY_DICT = {
        'app': {
            '0': u'二代有效身份证（临时身份证，需要同时提供户口本）',
            '1': u'车辆机动车登记证（仅限本地私家车，不含两地牌）',
            '2': u'一把以上车钥匙照片',
            '3': u'车辆行驶证（当地车管所核发的正式机动车行驶证，年检未过期，必须覆盖一个月）',
            '4': u'借款人本人的银行借记卡',
            '5': u'机动车交通强制险（必须覆盖一个月）',
            '6': u'进口车辆资料（《进口车检验单》、《海关关税专用缴款书》、《海关代征消费税专用缴款书》或海关《征免税证明》）',
            '7': u'随机抽取3个借款人的联系电话',
            '8': u'其它补充资料',
        },
        'loan': {
            '0': u'《借款申请表》',
            '1': u'《借款协议》',
            '2': u'相关合同和文件',
        }

    }

    pledge_type = db.Column(db.String(23))  # 类型:  抵押（GPS）/ 质押（转移）
    flow_id = db.Column(db.String(20))  # 流程单号
    url = db.Column(db.Text)  # 图片地址
    flow = db.Column(db.String(10))  # 所处流程: app/loan/track
    picture_type = db.Column(db.String(5))  # 图片类型
